#ifndef COMMONLOPPER_H
#define COMMONLOPPER_H

#include<mediabase.h>
#include<thread>

///
/// \brief The CommonLopper class
/// 通用的线程执行父类
///
class CommonLooper
{
public:
    CommonLooper();
    // 子类需要自己实现资源释放
    virtual ~CommonLooper();
    virtual RET_CODE start(); //开启线程
    virtual void stop(); //停止线程
    virtual bool running(); //判断是否正在运行
    virtual void setRunning(bool running); //更新运行状态
    virtual void loop() = 0; //线程执行的内容
private:
    static void *trampoline(void *p);//方法跳转，用于封装running方法
protected:
    std::thread *_worker = NULL;//执行任务的线程
    bool _request_abort = false; //是否需要停止线程的标识[默认是不需要停止的。一旦修改为true，就会把正在运行的线程给停止掉。即设置为true那么线程永远无法正常执行，只会启动后就马上关闭——看while循环的第一个return条件就知道了]
    bool _running = false; //线程是否正在运行的状态标识[默认是未启动的，需要调用过start才会开启线程]

};

#endif // COMMONLOPPER_H
